#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDir>
#include <QPair>
#include <QVector>
#include <QMutex>
#include <QStandardItemModel>
#include <Gfed/GameDescription.hpp>


namespace Ui {
class MainWindow;
}


class MainWindow : public QMainWindow
{
	Q_OBJECT

public:
	//////////////////////////////////////////////////////////////////////////
	typedef QPair< QString, QString >		OverridePair_t;
	typedef QVector< OverridePair_t >		OverrideVector_t;


	//////////////////////////////////////////////////////////////////////////
	explicit MainWindow(QWidget *parent = 0);
	~MainWindow();

	//////////////////////////////////////////////////////////////////////////
	void					logMessage( const std::string& str );

protected:
	//////////////////////////////////////////////////////////////////////////
	void					closeEvent( QCloseEvent* event ) override;

private slots:
	//////////////////////////////////////////////////////////////////////////
	void					on_actionQuit_triggered();
	void					on_actionCreate_triggered();
	void					on_actionOpen_triggered();

	void on_PackageTableRemoveButton_clicked();

	void on_PackageTableAddButton_clicked();

private:
	//////////////////////////////////////////////////////////////////////////
	void					readSettings();
	void					writeSettings();
	void					loadGameConfiguration( const QString& filename );
	void					saveGameConfiguration( const QString& filename );

private:
	//////////////////////////////////////////////////////////////////////////
	static const int		kMaxRecents			=	10;

	//////////////////////////////////////////////////////////////////////////
	Ui::MainWindow*			ui;
	QMutex					mLock;
	QAction*				mpRecents[ kMaxRecents ];
	QStringList				mRecentFiles;
	QDir					mWorkingDir;
	Gfed::GameDescription	mGameDesc;

	QStandardItemModel*		mpPackageModel;
};


#endif // MAINWINDOW_H
